using System;
using System.Collections;
using System.Data;
using System.Data.Common;
using System.Collections.Generic;

using WHC.Pager.Entity;
using Microsoft.Practices.EnterpriseLibrary.Data;
using WHC.Hotel.Entity;
using WHC.Hotel.IDAL;
using WHC.OrderWater.Commons;

namespace WHC.Hotel.DAL
{
	/// <summary>
	/// RoomType 的摘要说明。
	/// </summary>
	public class RoomType : BaseDAL<RoomTypeInfo>, IRoomType
	{
		#region 对象实例及构造函数

		public static RoomType Instance
		{
			get
			{
				return new RoomType();
			}
		}
		public RoomType() : base("KF_RoomType","ID")
		{
            this.IsDescending = false;
		}

		#endregion

		/// <summary>
		/// 将DataReader的属性值转化为实体类的属性值，返回实体类
		/// </summary>
		/// <param name="dr">有效的DataReader对象</param>
		/// <returns>实体类对象</returns>
		protected override RoomTypeInfo DataReaderToEntity(IDataReader dataReader)
		{
			RoomTypeInfo roomTypeInfo = new RoomTypeInfo();
			SmartDataReader reader = new SmartDataReader(dataReader);
			
			roomTypeInfo.ID = reader.GetInt32("ID");
			roomTypeInfo.Name = reader.GetString("Name");
			roomTypeInfo.BedsNumber = reader.GetInt32("BedsNumber");
			roomTypeInfo.DayPrice = reader.GetDecimal("DayPrice");
			roomTypeInfo.HalfPrice = reader.GetDecimal("HalfPrice");
			roomTypeInfo.DepositMoney = reader.GetDecimal("DepositMoney");
			roomTypeInfo.HourPrice = reader.GetDecimal("HourPrice");
			roomTypeInfo.EnablePartTime = reader.GetBoolean("EnablePartTime");
			roomTypeInfo.Note = reader.GetString("Note");
			
			return roomTypeInfo;
		}

		/// <summary>
		/// 将实体对象的属性值转化为Hashtable对应的键值
		/// </summary>
		/// <param name="obj">有效的实体对象</param>
		/// <returns>包含键值映射的Hashtable</returns>
        protected override Hashtable GetHashByEntity(RoomTypeInfo obj)
		{
		    RoomTypeInfo info = obj as RoomTypeInfo;
			Hashtable hash = new Hashtable(); 
			
 			hash.Add("Name", info.Name);
 			hash.Add("BedsNumber", info.BedsNumber);
 			hash.Add("DayPrice", info.DayPrice);
 			hash.Add("HalfPrice", info.HalfPrice);
 			hash.Add("DepositMoney", info.DepositMoney);
 			hash.Add("HourPrice", info.HourPrice);
 			hash.Add("EnablePartTime", info.EnablePartTime);
 			hash.Add("Note", info.Note);
 				
			return hash;
		}

        public RoomTypeInfo FindByName(string name)
        {
            string condition = string.Format("Name='{0}' ", name);
            return FindSingle(condition);
        }
    }
}